July 7, 2025

A little background

Direct from its website:

Galene (or Galène) is a videoconference server (an “SFU”) that is easy to deploy and that requires very moderate server resources. It was originally designed for lectures, conferences and student tutorials, but later turned out to be useful for traditional meetings. Galene has been used in production at two major universities (Université de Paris and Sorbonne Université) for lectures, practicals, seminars, and for staff meetings

Requirements

  • A recent FreeBSD install (version 14.3 at the time of this writing)
  • ZFS optional, but highly recommended

Base FreeBSD Setup

First, ensure you have the latest FreeBSD system updates installed. Use the following command (as root, indicated by the leading #):

# freebsd-update fetch install

Next, update your pkg repository to use the latest branch. Edit /etc/pkg/Freebsd.conf and change the string quarterly to latest. Run the following command to get the latest pkg database:

# pkg update

Galene Installation

Before we install Galene from the package, we add a couple of ZFS datasets to hold the videoconferencing data in /var/db/galene. This step is optional and Galene works just as well on UFS2. We use ZFS here as it offers extra features that may come in handy when running Galene in production.

Let’s say our pool is called videostar. Let’s create the datasets under /var/db for Galene.

Create ZFS datasets for Galene

# zfs create -p videostar/var/db/galene/data
# zfs create videostar/var/db/galene/groups
# zfs create videostar/var/db/galene/recordings

With these commands, we created the galene subdirectory with a separate dataset and below, three more datasets: recordings, data, and groups. We will populate these shortly.

Package Installation

FreeBSD’s package collection is easy to use and contains a ready-made Galene package. We install it next:

# pkg install galene

During the installation, the directories under /var/db/galene would have been created under /var/db. Since we created them with ZFS datasets, managing them became more flexible. For example, we can set a quota on the recordings dataset. These tend to grow big in size for long videoconferences. The quota prevents Galene from filling up the remaining disk space in the pool.

Galene Configuration File

Before we can start Galene for the first time, we need to define what groups are available. These form the videoconferencing rooms and let multiple users join a single room or hold conferences in different rooms without interfering with one another. Also, users define what kind of permissions they have and their passwords.

A basic example file in /var/db/galene/groups looks like this:

{
    "users":
    {
        "bob":
        {
            "password": "secret",
            "permissions": "op"
        }
    }
}

Here, we define a user called bob, a password and operator permissions in the room. The room itself is called videostar.

Adding a valid SSL certificate

Although we have not added it to the Ansible playbook, it’s relatively simple to add a valid SSL certificate, from letsencrypt.org. We’ll leave that as an exercise for you, dear reader. In short:

pkg install py311-certbot
certbot certonly -d YOURHOSTSFQDN --standalone
cp /usr/local/etc/letsencrypt/live/meet.fortasse.cloud/fullchain.pem /var/db/galene/data/cert.pem
cp /usr/local/etc/letsencrypt/live/meet.fortasse.cloud/privkey.pem /var/db/galene/data/key.pem
chown galene:galene /var/db/galene/data/*
service galene restart

Galene Startup Configuration

The galene package installed along with the binaries also the startup files in /usr/local/etc/rc.d. To start Galene when the system boots, add the following line to /etc/rc.conf using service:

# service galene enable

Start the service afterwards by running:

# service galene start

Check that the service is running:

# service galene status

A message saying that Galene is running should be displayed along with a process ID (PID). If not, then re-trace the steps above and check /var/log/messages for additional hints.

Testing Galene

We can find the PID of the running Galene process in the output of sockstat -l (listening sockets):

# sockstat -l|grep galene

In the same line, you can find the default port 8443 that Galene is listening on for incoming connections. Assuming our hostname is videostar.example, we can enter this in our browser URL bar: https://videostar.example:8443

A webpage opens asking you which group you want to join. Enter videostar (the one from our configuration above) and click the Join button. On the next page, enter the username and password from the configuration file. Select what kind of devices (camera, microphone) to allow and then click the Connect button. If all went well, you are now in videoconferencing room with full permissions. Give that url to other people after adding more users in the videostar.json file and restarting the galene process. Congratulations and happy video conferencing!

We’re dropping new posts — and videos — for technical topics regularly. So make sure you’re subscribed to the YouTube channel and following this feed in your favorite RSS reader. There’s also the newsletter, if you’d like to receive updates by email.

We’d like this content series to be interactive too — so what would you like to see us cover? What FreeBSD questions can we help you tackle?  Get in touch with your ideas.


Contributed by Benedict Reuschling